const cp = require('child_process');  // 引入 child_process 模块
const path = require('path');
const mongoose = require('mongoose');  // 引入 mongoose
const Movie = mongoose.model('Movie');  // 获取 Movie 模型

(async () => {
  const script = path.resolve(__dirname, '../crawler/trailer-list');
  const child = cp.fork(script);  // 创建子进程，并运行传入的模块，返回子进程对象
  let invoked = false;  // 用于标识进程脚本有没有运行过

  // 监听子进程错误
  child.on('error', err => {
    if (invoked) return;  // 子进程运行过则不作任何处理

    invoked = true;
    console.log(err);
  })

  // 监听子进程退出
  child.on('exit', code => {
    if (invoked) return;  // 子进程运行过则不作任何处理
  
    invoked = true;
    let err = code === 0 ? null : new Error('exit code ' + code);
    console.log(err);
  })

  // 获取子进程中运行的模块传递过来的数据
  child.on('message', data => {
    const result = data.result;
    // console.log(result);

    result.forEach(async (item) => {
      // 在数据库中查找数据
      let movie = await Movie.findOne({
        doubanId: item.doubanId
      });

      if (!movie) {
        // 如果 movie 为空，则说明数据库中没有该条数据
        movie = new Movie(item);  // 依据数据模型创建数据
        await movie.save();  // 存入数据库
      }
    })
  })
})();
